/**
 * 扩展 easyui 的 validatebox 控件
 */

(function($){

    /* 设置控件的必填提示信息 有效果 */
    $.map(['validatebox','textbox','passwordbox','filebox','searchbox',
        'combo','combobox','combogrid','combotree',
        'datebox','datetimebox','numberbox',
        'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){
        if ($.fn[plugin]){
            $.extend($.fn[plugin].defaults,{
                missingMessage:"必填"
            });
            //$.fn[plugin].defaults.required = true; // 有效果
            //$.fn[plugin].defaults.missingMessage = '必填'; // 有效果
        }
    });

    /* 没有效果 */
    $.extend($.fn.validatebox.defaults,{
        //required:true, // 没有效果
        //missingMessage:"必填" // 没有效果
    });

    /**
     扩展 easyui 文本控件校验规则，只在form表单中才有效
     其中easyui也存在默认的校验规则

     在html中初始化时
          <input class="easyui-validatebox" data-options="required:true,validType:['number','minLength[n]','maxLength[n]']" />

     在JS文件中
          $("#id").validatebox({
              validType:"minLength[n]" // 单个调用
              validType:["number","minLenth[n]","maxLength[n]"] // 多个调用
          });

          对于 easyui-combobox,easyui-datebox 等一样
     */
    $.extend($.fn.validatebox.defaults.rules,{
        /**
         * easyui 默认的 email 校验
         * 调用方式为 email
         */
        email:{
            validator:function(value){
                return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
            },
            message:"请输入有效的电子邮件地址"
        },
        /**
         * easyui 默认的 url 校验
         * 调用方式为 url
         */
        url:{
            validator:function(value){
                return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
            },
            message:"请输入有效的URL地址"
        },
        /**
         * 文本长度校验，修改了 eaysui 默认的 length 校验
         * 调用方式为 length[n] ，n 是长度值
         */
        length:{
            validator:function(value,params){
                return value.length==params[0];
            },
            message:"长度必须为{0}"
        },
        /**
         * easyui 默认的 remote 校验
         * 调用方式为 remote[url,param] ，目前还未用过该校验
         */
        remote:{
            validator:function(value,params){
                var url=params[0];
                var key=params[1];
                var data={};
                data[key]=value;
                var result=$.ajax({url:url,dataType:"json",data:data,async:false,cache:false,type:"post"}).responseText;
                return result=="true";
            },
            message:"请修正该字段"
        },
        /**
         * 最小值校验
         * 调用方式为 min[n] ，n 为最小值
         */
        min:{
            validator:function(value,params){
                return value>=params[0];
            },
            message:"值不能小于{0}"
        },

        /**
         * 最大值校验
         * 调用方式为 max[n] ，n 为最大值
         */
        max:{
            validator:function(value,params){
                return value<=params[0];
            },
            message:"值不能大于{0}"
        },

        /**
         * 值的范围校验
         * 调用方式为 range[n,m] ，n 为最小值，m 为最大值
         */
        range:{
            validator:function(value,params){
                return value>=params[0] && value<=params[1];
            },
            message:"值必须在{0}-{1}之间"
        },

        /**
         * 最少长度校验
         * 调用时为 minLength[n] ，n 为最少字数
         */
        minLength:{
            validator:function(value,params){
                return value.length>=params[0];
            },
            message:"最少{0}个字"
        },

        /**
         * 最大长度校验
         * 调用方式为 maxLength[n] ，n 为最多字数
         */
        maxLength:{
            validator:function(value,params){
                return value.length<=params[0];
            },
            message:"最多{0}个字"
        },

        /**
         * 数字校验，支持正数、负数、整数、小数
         * 调用方式为 number
         * easyui 自带的 easyui-numberbox 控件了解一下
         */
        number:{
            validator:function(value){
                return /^(\-|\+)?\d+(\.\d+)?$/.test(value);
            },
            message:"请输入数字"
        },

        /**
         * 汉字校验
         * 调用方式为 chinese
         */
        chinese:{
            validator:function(value){
                return /^[\u0391-\uFFE5]+$/.test(value);
            },
            message:"请输入汉字"
        },

        /**
         * 英文校验
         * 调用方式为 english
         */
        english:{
            validator:function(value){
                return /^[A-Za-z]+$/.test(value);
            },
            message:"请输入英文"
        },

    });

})(jQuery);